<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>defineProperty</title>
</head>
<body>
  <script>
    // defineProperty()方法拦截了Object.defineProperty() 操作
    var handler = {
      defineProperty (target, key, descriptor) {
        return false
      }
    };
    var target = {};
    var proxy = new Proxy(target, handler);
    proxy.foo = 'bar'; // 不会生效
    console.log('proxy', proxy)
    /**
     * 上面代码中，defineProperty()方法内部没有任何操作，只返回false，导致添加新属性总是无效。
     * 注意，这里的false只是用来提示操作失败，本身并不能阻止添加新属性。
     *
     * 注意，如果目标对象不可扩展（non-extensible），则defineProperty()不能增加目标对象上不存在的属性，否则会报错。
     * 另外，如果目标对象的某个属性不可写（writable）或不可配置（configurable），则defineProperty()方法不得改变这两个设置。
    */
  </script>
</body>
</html>